/**
 * Projeto Myou - Disciplina: Sistemas de Informação I
 * @author Ronycley Gonçalves Agra
 * @since 23/09/2011
 */
package myou.classes;

import java.util.Calendar;
import java.util.GregorianCalendar;

/**
 * Classe que encapsula o comportamento de um Empréstimo
 * @author Ronycley Gonçalves Agra
 * @version 1.00
 * @since Milestone 1 23/09/2011 
 * @see myou.classes.Sistema
 * @see myou.classes.Interesse
 * @see myou.classes.Item
 * @see myou.classes.Mensagem
 * @see myou.classes.RequisicaoDeAmizade
 * @see myou.classes.RequisicaoDeEmprestimo
 * @see myou.classes.Sessao
 * @see myou.classes.Topico
 * @see myou.classes.Usuario
 */
public class Emprestimo {

	private String id;
	private Usuario emprestador;
	private Usuario beneficiado;
	private Item item;
	private int duracao;
	private String idRequisicao;
	private String situacao;
	private Calendar dataInicio;
	private Calendar dataEntrega;

	/**
	 * Contrutor
	 * @param emprestador O usuário emprestador
	 * @param beneficiado O usuário beneficiado
	 * @param item O item empresatdo
	 * @param duracao A duaração do empréstimo
	 * @param idRequisicao O id da requisição que gerou o empréstimo
	 */
	public Emprestimo(Usuario emprestador, Usuario beneficiado, Item item, int duracao, String idRequisicao) {
		this.id = this.generateId();
		this.emprestador = emprestador;
		this.beneficiado = beneficiado;
		this.item = item;
		this.duracao = duracao;
		this.idRequisicao = idRequisicao;
		this.situacao = "Andamento";
		this.dataInicio = Sistema.getDataSistema();
		this.dataEntrega = new GregorianCalendar();
		this.dataEntrega.add(Calendar.DAY_OF_MONTH, this.duracao);
		this.dataEntrega.clear(Calendar.MILLISECOND);
	}

	/**
	 * Retorna o id do empréstimo
	 * @return O id do empréstimo
	 */
	public String getId() {
		return id;
	}

	/**
	 * Modifica o id do Empréstimo
	 * @param id O novo id do empréstimo
	 */
	public void setId(String id) {
		this.id = id;
	}


	/**
	 * Retorna O usuário emprestador
	 * @return O usuário emprestador
	 */
	public Usuario getEmprestador() {
		return emprestador;
	}

	/**
	 * Modifica o usuário emprestador
	 * @param emprestador O novo usuário emprestador
	 */
	public void setEmprestador(Usuario emprestador) {
		this.emprestador = emprestador;
	}

	/**
	 * Retorna o usuário beneficiado
	 * @return O usuário beneficiado
	 */
	public Usuario getBeneficiado() {
		return beneficiado;
	}

	/**
	 * Modifica o usuário beneficiado
	 * @param beneficiado O usuário beneficiado
	 */
	public void setBeneficiado(Usuario beneficiado) {
		this.beneficiado = beneficiado;
	}

	/**
	 * Retorna o item emprestado
	 * @return O item emprestado
	 */
	public Item getItem() {
		return item;
	}

	/**
	 * Modifica o item emprestado
	 * @param item O novo item emprestado
	 */
	public void setItem(Item item) {
		this.item = item;
	}

	/**
	 * Retorna a duração do empréstimo
	 * @return A duração do empréstimo
	 */
	public int getDuracao() {
		return duracao;
	}

	/**
	 * Modifica a duração do empréstimo
	 * @param duracao A nova duração do empréstimo
	 */
	public void setDuracao(int duracao) {
		this.duracao = duracao;
	}

	/**
	 * Retorna a situação do empréstimo
	 * @return A situação do empréstimo
	 */
	public String getSituacao() {
		return situacao;
	}

	/**
	 * Modifica a situação do Empréstimo
	 * @param situacao A nova situação id do empréstimo
	 */
	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	/**
	 * Retorna a data inicial do empréstimo
	 * @return A data inicial do empréstimo
	 */
	public Calendar getDataInicio() {
		return dataInicio;
	}
	
	/**
	 * Modifica a data inicial do empréstimo
	 * @param dataInicio A nova data inicial do empréstimo
	 */
	public void setDataInicio(Calendar dataInicio) {
		this.dataInicio = dataInicio;
	}

	/**
	 * Retorna a data final do empréstimo
	 * @return A data final do empréstimo
	 */
	public Calendar getDataEntrega() {
		return dataEntrega;
	}

	/**
	 * Modifica a data final do empréstimo
	 * @param dataEntrega A nova data final do empréstimo
	 */
	public void setDataEntrega(Calendar dataEntrega) {
		this.dataEntrega = dataEntrega;
	}


	/**
	 * Gera aleatoriamente o id para o empréstimo
	 * @return O id do empréstimo.
	 */
	private String generateId(){
		int parteRandomica = (int)(Math.random()* 10000);
		return (new Integer(parteRandomica)).toString();
	}

	/**
	 * Retorna o id da requisição que gerou o empréstimo
	 * @return O id  da requisição que gerou o empréstimo
	 */
	public String getIdRequisicao() {
		return idRequisicao;
	}		
}